package Stream.终止操作符号;

import java.util.Arrays;
import java.util.List;

public class test {
    public static void main(String[] args) {
        // anyMatch ：判断元素中是否有一个元素满足条件，只有有一个元素满足条件了就停止执行，并且返回null
        // anyMatch：返回true则终止
        List<String> strings = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings.stream().anyMatch(a -> {
            System.out.println("f");
            return a.contains("f");
        }));

        // allMatch ：判断元素中是否有所有元素满足条件，所有元素都满足条件，就返回true，否者返回false
        List<String> strings1 = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings1.stream().allMatch(a -> a.length() > 0));

        // noneMatch ：判断元素中是否有所有元素都不满足条件，都不满足条件返回ture，否则返回false
        List<String> strings2 = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings2.stream().noneMatch(a -> a.length() > 10));

        // findAny() ：随机获取集合元素，使用stream来findAny，那么获取的一直都是第一个元素，只有使用parallelStream才会出行随机的情况
        // 这个是因为stream是串行，获取第一个是最快的，所以就直接第一个了
        List<String> strings3 = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings3.parallelStream().findAny().get());

        // findFirst() : 无论使用parallelStream还是stream，都是返回第一个集合的第一个元素
        // 这个是因为stream是串行，获取第一个是最快的，所以就直接第一个了
        List<String> strings4 = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings4.parallelStream().findFirst().get());

        // forEach for循环

        // collect 收集器，将流转换

        // reduce ：累计 (a,b) -> a+b  ，   a表示结果，b表示的是集合中的元素，每一次都返回 a+b的结果给a
        List<String> strings5 = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings5.parallelStream().reduce((a,b) -> a+b).get());
        // 这样可以指定a的初始化的值了，要不然a就是空字符串
        System.out.println(strings5.stream().reduce("初始化a的值", (a, b) -> a + b));

        // count统计元素的个数
        List<String> strings6 = Arrays.asList("ainde","dfdf","qwer","dfde");
        System.out.println(strings6.stream().count());

    }
}
